In many different scenarios, resources are used for performing work for entities that expect tasks to complete in relatively short order, e.g., a user may expect to interact with a particular computer program by waiting for results from the program before moving on to another task. Entities may also request tasks without any expectation of receiving interactive results. For example, the same user may run a different program knowing that the program will need to execute overnight before the user sees any results. In these examples, the resources may be computational resources associated with various computing devices that execute the computer programs.
Other types of resources also can be involved in interactive and non-interactive scenarios. For example, consider an office environment where some clients visit the office and expect immediate attention from employees. For example, an individual employee can perform an interactive task for the visiting client while they wait. Other clients may tend to communicate by mail and expect some delay before hearing from anyone in the office. Thus, the same employee may perform a non-interactive task by responding to the client by mail. In this scenario, the office employees themselves can be viewed as resources that perform both interactive and non-interactive tasks. In some cases, the employees may use computing devices to accomplish these tasks.
In computing contexts, one approach to improving interactivity of computing tasks is simply to upgrade computing hardware or add new hardware. Other approaches may use various scheduling schemes that attempt to ensure fairness between different tasks. For example, computational resources may maintain a queue of task requests and process them in the order they are received. Existing techniques, however, may tend to allocate resources in a way that is inefficient from the perspective of entities that wish to use the resources interactively.